package br.com.biavan.dao;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;

import br.com.biavan.model.Atividade;
import br.com.biavan.utils.HibernateUtil;

public class AtividadeDAO {
	
	private Session session;		
			
	public boolean inserir(Atividade atividade) {
		boolean resp = false;
		try {
			session = HibernateUtil.getSession();
			session.beginTransaction();
			session.save(atividade);
			session.getTransaction().commit();
			resp = true;
		} catch (Exception e) {
			session.getTransaction().rollback();
			e.printStackTrace();
		} finally {
			session.close();
		}
		return resp;
	}

	public boolean atualizar(Atividade atividade) {
		boolean resp = false;
		try {
			session = HibernateUtil.getSession();
			session.beginTransaction();
			session.update(atividade);
			session.getTransaction().commit();
			resp = true;
		} catch (Exception e) {
			session.getTransaction().rollback();
			e.printStackTrace();
		} finally {
			session.close();
		}
		return resp;
	}

	public boolean apagar(Atividade atividade) {
		boolean resp = false;
		try {
			session = HibernateUtil.getSession();
			session.beginTransaction();
			session.delete(atividade);
			session.getTransaction().commit();
			resp = true;
		} catch (Exception e) {
			session.getTransaction().rollback();
			e.printStackTrace();
		} finally {
			session.close();
		}
		return resp;
	}

	public List<Atividade> listar() {
		List<Atividade> atividades = new ArrayList();
		session = Conexao.getSession();
		try {
			session.beginTransaction();
			atividades = session.createCriteria(Atividade.class).list();
			session.getTransaction().commit();
		} catch (Exception e) {
			session.getTransaction().rollback();
			e.printStackTrace();
		} finally {
			session.close();
		}
		return atividades;
	}
	
	public Atividade getById(long id) {
		Atividade atividade = null;
		try {
			session = HibernateUtil.getSession();
			session.beginTransaction();
			atividade = (Atividade) session.get(Atividade.class, id);
			session.getTransaction().commit();
		} catch (Exception e) {
			session.getTransaction().rollback();
			e.printStackTrace();
		} finally {
			session.close();
		}
		return atividade;
	}
	
	public boolean buscar(Atividade atividadeBusca) {
		Atividade atividade = null;
		try {
			session = HibernateUtil.getSession();
			session.beginTransaction();
			
			String select = "from Atividade as u "
					+ "where u.enunciado = :enunciado";
			
			Query query = session.createQuery(select)
					.setParameter("enunciado", atividadeBusca.getEnunciado());
			
			List<?> resultList = query.list();
			for(Object obj : resultList) {
				Object grupo = (Object) obj;
				atividade = (Atividade) grupo;
			}
			
			session.getTransaction().commit();
		} catch (Exception e) {
			session.getTransaction().rollback();
			e.printStackTrace();
		} finally {
			session.close();
		}
		return atividade.equals(atividadeBusca);
	}
	
}


